package com.bookmanager.www.service;

import com.bookmanager.www.entity.FlUser;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author 风离
 * @since 2021-09-17
 */
public interface FlUserService extends IService<FlUser> {

    /**
     * 注册用户
     * @param username
     * @param password
     * @return
     */
    int registerUser(String username, String password);

    /**
     * 根据用户名查找用户
     * @param username
     * @return
     */
    FlUser selectUserByUsername(String username);

    /**
     * 根据用户名密码登录用户
     * @param username
     * @param password
     * @return
     */
    FlUser selectUserByUsernameAndPassword(String username, String password);

    /**
     * 通过UserId 获取Role名
     * @param userId
     * @return
     */
    String selectRoleById(String userId);

    /**
     * 通过邮箱注册用户
     * @param email
     * @param password
     * @return
     */
    int registerUserByEmail(String email, String password);

    /**
     * 通过手机号注册用户
     * @param phoneNum
     * @param password
     * @return
     */
    int registerByPhoneNum(String phoneNum, String password);


    /**
     * 根据邮箱密码登录用户
     * @param username
     * @param password
     * @return
     */
    FlUser selectUserByEmailAndPassword(String username, String password);

    /**
     * 根据手机号和密码登录用户
     * @param username
     * @param password
     * @return
     */
    FlUser selectUserByPhoneNumAndPassword(String username, String password);

    /**
     * 修改用户余额
     * @param userId
     * @param newBalance
     * @return
     */
    BigDecimal changeAccountBalanceByUserId(String userId, BigDecimal newBalance);

    /**
     * 通过第三方账号注册用户
     * @param username
     * @param password
     * @param avatar
     * @param uuid
     * @param source
     * @param accessToken
     * @return
     */
    FlUser registerUserByOAuth2(String username, String password, String avatar, String uuid, String source, String accessToken);

    /**
     * 注册管理员
     * @param username
     * @param password
     * @param roleId
     * @return
     */
    int registerAdmin(String username, String password, Integer roleId);
}
